package com.tedu.api;

import org.junit.Test;

public class StringBuilderAPI {
    /**
     * 字符串大量拼接：注意String造成内存溢出
     *
     */
    @Test
    public void testString() {

      String str="字符串";
      for (int i=0;i<1000000000L;i++){


      }
    }
    /**
     * String-----------不可改变对象    BUG(常量池)
     *
     * 假设：拼接出100000w个String---内存【开销过大】
     * 操作系统发现内存空间越来越小，全去硬盘上开辟空间--程序、电脑会卡
     *
     * 解决方案
     * StringBuilder对象   可变字符串对象
     * 语法：StringBuilder sb=new StringBuilder("字符串")；
     *
     * C语言   变量
     * Java语言   变量   int a=1   内存开辟a空间，保存1，JVM虚拟机提供GC
     *                            会存在内存溢出
     */
  @Test
    public void testSB() {

      //创建可变的字符串对象【解决String大量拼接，造成内存溢出】
      String str = "你就是我的";

      StringBuilder sb=new StringBuilder(str);

      //append方法  添加新字符串，等同于加号【拼接】

      sb.append("小可爱");

      System.out.println(sb);

  }
  //**********************************
    /**
     * replace方法  替换  返回值：String
     * 作用：可以将字符串中指定范围内“内容”替换成给定的内容
     * 含头不含尾
     * replace(int start,int end,String str)
     * 开始位置  结束位置，替换内容
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类
        StringBuilder sb=new StringBuilder("你是我的小可爱");
        sb.replace(5,8,"小baby");
        System.out.println(sb);
    }
    /**
     * insert方法  插入  返回值：String
     * 作用：将给定字符串插入到当前字符串中某个位置
     * insert(int index;String str)
     * 插入位置，插入内容
     */
    @Test
    public void testInsert(){
        //创建  可变字符串对象
        StringBuffer sb=new StringBuffer("世一锋洁世一");
        sb=sb.insert(0,"今天");
        System.out.println(sb);
    }
    /**
     * 考试题
     * StringBuilder和StringBuffer的区别
     * StringBuilder和StringBuffer-----方法完全一致【追加、替换、插入】
     * StringBuffer------JDK1.0------线程安全【效率低】
     * StringBuilder-----JDK1.0------线程不安全【效率高】  √
     *
     * 需求说明书：模块用什么类【标注】    业务
     *
     */
  }

